//状态 state应该是一个对象
// 仓库里面储存了各种状态，叫做state
// 这些仓库里面的状态数据，在任意一个组件内部都可以被调用
// 用户管理
export const state = () => ({
    userInfo:{
        token:'',
        user:{

        }
    }
})


// 如果需要修改状态数据, 必须先定义 修改方法, 声明 mutations
export const mutations = {
    // 这里每一个属性都是一个函数
    setUserInfo(state,data){
        // mutations 里面可以接受两个参数
        // 第一个是 state 当前仓库的数据本身
        // 第二个是调用时传进来的参数
        // 修改当前状态
        state.userInfo = data;
    }
}


export const actions = {
    login({commit},data){
        // 这个函数可以接收到两个参数
        // 1. 当前仓库 store 本身的commit
        // 2. 外部调用时额外的数据
        return this.$axios({
            url:'/accounts/login',
            method:'post',
            data:data
        }).then(res => {
            if(res.data.token){
                // action 是 vuex 执行异步操作的地方
               // 但是修改 state 数据依然只能通过 mutations
               commit('setUserInfo',res.data);
            }
            // 这里返回res让外部处理
            return res;
        })
    }
}